//////////////////////////////////////////////////////////////////////////////////////////////
// #![no_std]                                                                               //
// #![no_main]                                                                              //
// mod vga_buffer;                                                                          //
// use core::panic::PanicInfo;                                                              //
//                                                                                          //
// #[panic_handler]                                                                         //
// fn panic(info: &PanicInfo) -> ! {                                                        //
//     println!("{info}");                                                                  //
//     loop {}                                                                              //
// }                                                                                        //
//                                                                                          //
// // STAGE1: static HELLO: &[u8] = b"Hello BLOG OS";                                       //
//                                                                                          //
// #[no_mangle]                                                                             //
// pub extern "C" fn _start() -> ! {                                                        //
//     // STAGE1:                                                                           //
//     // let vga_buffer = 0xb8000 as *mut u8;                                              //
//     //                                                                                   //
//     // for (i, &byte) in HELLO.iter().enumerate() {                                      //
//     //     unsafe {                                                                      //
//     //         *vga_buffer.offset(i as isize * 2) = byte;                                //
//     //         *vga_buffer.offset(i as isize * 2 + 1) = 0xb;                             //
//     //     }                                                                             //
//     // }                                                                                 //
//     // END STAGE1                                                                        //
//     // STAGE2                                                                            //
//     // vga_buffer::print_something();                                                    //
//     // END STAGE2                                                                        //
//     // STAGE3                                                                            //
//     // use core::fmt::Write;                                                             //
//     // vga_buffer::WRITER.lock().write_str("Hello Blog Os").unwrap();                    //
//     // write!(vga_buffer::WRITER.lock(), " release number: {}.{}", 1, 1.0/3.0).unwrap(); //
//     // END STAGE3                                                                        //
//                                                                                          //
//     println!("hello world {}", "!");                                                     //
//     panic!("some message send here");                                                    //
//                                                                                          //
//     // #[warn(clippy::empty_loop)]                                                       //
//     // loop {}                                                                           //
// }                                                                                        //
//////////////////////////////////////////////////////////////////////////////////////////////

#![no_std]
#![no_main]

use core::panic::PanicInfo;

mod vga_buffer;

#[no_mangle]
pub extern "C" fn _start() -> ! {
    println!("Hello World{}", "!");

    loop {}
}

/// This function is called on panic.
#[panic_handler]
fn panic(info: &PanicInfo) -> ! {
    println!("{}", info);
    loop {}
}

////////////////////////////////////////////////////
// #![feature(custom_test_frameworks)]            //
// #![test_runner(crate::test_runner)]            //
//                                                //
// #[cfg(test)]                                   //
// fn test_runner(tests: &[&dyn Fn()]) {          //
//     println!("Running {} tests", tests.len()); //
//     for test in tests {                        //
//         test();                                //
//     }                                          //
// }                                              //
////////////////////////////////////////////////////


